package com.android.yummycookies.commonInterface;

import java.util.Map;
import java.util.Set;

/**
 * 
 * @author julien
 * Interface des classes servant a stocker des elements
 * en fonction d'un identifiant
 * @param <T> Type des identifiants des elements a stocker
 * @param <U> Type des elements a stocker
 * @param <V> Type de collection d'elements a renvoyer
 */
public interface IStore<T,U,V> {

	/**
	 * Renvoie l'element identifie par l'id renseigne,
	 * null si inexistant
	 * @param id l'identifiant de l'element recherche
	 * @return l'element associe a l'id renseigne
	 */
	public U get(T id);

	/**
	 * Renvoie la liste des elements correspondants
	 * aux id renseignes (null si inexistants)
	 * @param ids liste d'identifiants d'elements a rechercher
	 * @return une collection d'elements correspondant aux
	 * identifiants renseignes
	 */
	public V getAll(Set<T> ids);
	
	/**
	 * Ajoute un element identifie par l'id renseigne
	 * @param id l'identifiant de l'element a ajouter
	 * @param object l'element a ajouter
	 */
	public void put(T id, U object);
	/**
	 * Ajoute un ensemble d'elements identifies par
	 * les id renseignes
	 * @param objects une map id/objet
	 */
	public void putAll(Map<T, U> objects);
	
	/**
	 * Supprime l'element identifie par l'id renseigne
	 * @param id un identifiant d'element a supprimer
	 */
	public void remove(T id);

	/**
	 * Supprime un ensemble d'elements identifies par
	 * les id renseignes
	 * @param ids ensemble d'identifiants d'element
	 * a supprimer
	 */
	public void removeAll(Set<T> ids);
	
	/**
	 * Retourne true si un element stocke correspond a
	 * l'id renseigne
	 * @param id l'identifiant d'un element
	 * @return true si l'identifiant correspond a un
	 * element stocke
	 */
	public boolean isStored(T id);
	
	/**
	 * Supprime tous les elements stockes
	 */
	public void clear();
	
}
